/**
 * 
 */
package model;

/**
 * Deze klasse bevat de nodige code om een cursushistoriek object aan te maken
 * @author Yves Vandeput
 * @author Nicolas Vanderhulst
 * @version 20111009
 */
public class CursusHistoriek implements Comparable<CursusHistoriek>,Cloneable{

	// Variabelen
	private Cursus gevolgdeCursus;
	private int schoolJaar;
	private int score;

	// Getters and Setters
	public int getSchoolJaar() {
		return schoolJaar;
	}

	public Cursus getGevolgdeCursus() {
		return gevolgdeCursus;
	}

	public void setGevolgdeCursus(Cursus gevolgdeCursus) {
		this.gevolgdeCursus = gevolgdeCursus;
	}

	public void setSchoolJaar(int schoolJaar) {
		this.schoolJaar = schoolJaar;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	// Basis Constructor
	public CursusHistoriek(Cursus gevolgdeCursus, int schooljaar, int score) throws Exception {
		this.setGevolgdeCursus(gevolgdeCursus);
		this.setSchoolJaar(schooljaar);
		this.setScore(score);
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((gevolgdeCursus == null) ? 0 : gevolgdeCursus.hashCode());
		result = prime * result + schoolJaar;
		result = prime * result + score;
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof CursusHistoriek)) {
			return false;
		}
		CursusHistoriek other = (CursusHistoriek) obj;
		if (gevolgdeCursus == null) {
			if (other.gevolgdeCursus != null) {
				return false;
			}
		} else if (!gevolgdeCursus.equals(other.gevolgdeCursus)) {
			return false;
		}
		if (schoolJaar != other.schoolJaar) {
			return false;
		}
		if (score != other.score) {
			return false;
		}
		return true;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "CursusHistoriek [gevolgdeCursus=" + gevolgdeCursus
				+ ", schoolJaar=" + schoolJaar + ", score=" + score + "]";
	}

	@Override
	public int compareTo(CursusHistoriek o) {
		CursusHistoriek h = (CursusHistoriek)o;
		if (h.gevolgdeCursus.hashCode() < o.gevolgdeCursus.hashCode()) {
			return -1;
		} else if (h.gevolgdeCursus.hashCode() > o.gevolgdeCursus.hashCode()) {
			return 1;
		} else {
			if (h.schoolJaar < o.schoolJaar) {
				return -1;
			}else if (h.schoolJaar>o.schoolJaar) {
				return 1;
			}else {
				return 0;
			}
		}
	}
}
